import Vue from 'vue'
import Router from 'vue-router'
import routes from './router'
import { setTitle } from '@/lib/util'

Vue.use(Router)
const router = new Router({
  routes: routes
})
const IS_LOGIN = true // 当前是模拟 实际上应该从后台获取状态.
// 全局前置守卫     (to, from, next)为回调函数
router.beforeEach((to, from, next) => {
  // to from 都是路由对象. next 是一个函数
  //  from 即将离开的路由
  // to 即将进入的路由
  to.meta && setTitle(to.meta.title)
  if (to.name !== 'login') {
    // 1.即将访问的页面不是登录页面
    //  判断是否登录
    //    1.登录 继续
    //    2.未登录 跳转登录页
    // 2.是登录页面
    //  判断是否登录
    //   1.登录 跳转 首页或其他
    //   2.未登录 继续(因为本身就是去登录页面)
    if (IS_LOGIN) next()
    else next({ name: 'login' })
  } else {
    if (IS_LOGIN) next({ name: 'home' })
    else next()
  }
})


// // 跳转前 调用
// router.beforeEach((to, from, next) => {
//   // to from 都是路由对象. next 是一个函数
//   //  from 即将离开的路由
//   // to 即将进入的路由
//   if (to.name !== 'login') {
//     // 1.即将访问的页面不是登录页面
//     //  判断是否登录
//     //    1.登录 继续
//     //    2.未登录 跳转登录页
//     // 2.是登录页面
//     //  判断是否登录
//     //   1.登录 跳转 首页或其他
//     //   2.未登录 继续(因为本身就是去登录页面)
//     if (from.query.teken === 'teken001') next()
//     else next({ name: 'login' })
//   } else {
//     if (from.query.teken === 'teken001') next({ name: 'home' })
//     else {
//       // 1. todo 可以选择加一个正在登录的样式
//       next()
//       // from.query.teken = 'teken001'
//     }
//   }
// })

// router.beforeResolve((to, from, next) => { })
// 跳转后 调用  不能阻止跳转
router.afterEach((to, from) => {
  // 此处去掉正在登录的样式
})



export default router
// export default new Router({
//   // mode: 'history',  // html5 默认哈希模式 页面无刷新.
//   routes: routes
//   // routes

// })
// 导航守卫
// 1.全局守卫




// 全局守卫
// 1. beforeEach 跳转前 调用
// 2. afterEach 跳转后调用
// 3. beforeResolve    导航被确认(所有的导航钩子都结束)前并所有组件守卫和异步路由组件被解析后调用

// 路由独享守卫 在路由列表中配置
// beforeEnter 注意逻辑后调用next()

// 组件守卫 组件中定义
// 1.
// 2.
// 3.


// 1.导航被触发
// 2. 在即将来离开的组件中 带调用离开守卫 beforeRouterLeave
// 3.调用全局前置守卫 beforeEach
// 4.如果是被复用的组件则调用beforeRouteUpdate 不是则调用路由独享守卫beforeRouteEnter 调用.
// 5.解析异步路由组件,
// 6. 在即将进入的组件中调用beforeRouterEnter
// 7. 调用全局解析守卫 beforeResolve
// 8. 导航被确认
// 9. 调用全局的后置守卫 afterEach
// 10.触发DOC的渲染
// 11.用创建好的实例 调用beforeRouterEnter 守卫中传给next()中的回调函数
